package com.example.supermarket.service;

import com.example.supermarket.entity.Card;
import com.example.supermarket.entity.Member;
import com.example.supermarket.mapper.CardMapper;
import com.example.supermarket.mapper.MemberMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;

import java.util.List;

/**
 * @author Bosen
 * @date 2021/10/11 20:32
 */
@Service
public class AdminMemberService {

    @Autowired
    MemberMapper memberMapper;

    @Autowired
    CardMapper cardMapper;

    /**
     * <p>增加会员信息</p>
     * @return
     * 0 必填信息不能为空
     * 1 成功
     *-1 失败
     * 2 会员卡不存在
     * 3 会员昵称已存在
     * 4 该会员卡已被使用
     */
    public int addMemberInfo(String name, String password, String cardId) {
        if ("".equals(name) || "".equals(password)) {
            // 昵称或密码为空
            return 0;
        }
        if (memberNameIsExist(name)) {
            // 会员昵称已存在
            return 3;
        }
        int card;
        if ("".equals(cardId) || cardId == null) {
            card = 0;
        } else {
            if (cardIdIsUse(cardId, 0)) {
                // 会员卡已被使用
                return 4;
            }
        }
        if (!cardIdIsExist(cardId)) {
            // 会员卡不存在
            return 2;
        }
        return insertMember(name, password, cardId);
    }

    /**
     * <p>编辑会员信息</p>
     * @return
     * 0 昵称不能为空
     *-1 修改失败
     * 1 修改成功
     * 2 会员卡不存在
     * 3 会员卡已被使用
     */
    public int update(int id, String name, String cardId) {
        if ("".equals(name)) {
            // 昵称不能为空
            return 0;
        }
        if (!cardIdIsExist(cardId)) {
            // 会员卡不存在
            return 2;
        }
        if (cardIdIsUse(cardId, id)) {
            // 会员卡已被使用
            return 3;
        }
        if (!updateMemberInfo(id, name, cardId)) {
            // sql语句执行失败
            return -1;
        }
        return 1;
    }

    /**
     * <p>根据id对会员信息进行删除</p>
     */
    public int deleteMemberInfo(int id) {
        return memberMapper.deleteById(id);
    }

    /**
     * <p>检查是否存在该会员卡</p>
     */
    private boolean cardIdIsExist(String cardId) {
        if ("".equals(cardId)) {
            return true;
        }
        List<Card> cards = cardMapper.findAll();
        for (Card card : cards) {
            if (cardId.equals(card.getCardId())) {
                return true;
            }
        }
        return false;
    }

    /**
     * <p>检查会员昵称是否已经存在</p>
     */
    private boolean memberNameIsExist(String name) {
        for (Member member : memberMapper.findAll()) {
            if (name.trim().equals(member.getName())) {
                return true;
            }
        }
        return false;
    }

    /**
     * <p>检查会员卡是否已经被使用</p>
     */
    private boolean cardIdIsUse(String cardId, int id) {
        for (Member member : memberMapper.findAll()) {
            if (cardId.trim().equals(member.getCardId()) &&
                    !"".equals(cardId.trim()) && id != member.getId()) {
                return true;
            }
        }
        return false;
    }

    /**
     * <p>增加会员信息</p>
     */
    private int insertMember(String name, String password, String cardId) {
        password = DigestUtils.md5DigestAsHex(password.getBytes());
        return memberMapper.insertMember(cardId, name, password);
    }

    /**
     * <p>根据id对会员信息进行修改</p>
     */
    private boolean updateMemberInfo(int id, String name, String cardId) {
        return memberMapper.updateNameAndCardIdById(id, name, cardId) == 1;
    }
}
